home *** CD-ROM | disk | FTP | other *** search
/ Disc to the Future 2 / Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin / UNIX / PASCAL / PTOC / PTC_C.7 < prev    next >
Text File  |  1992-11-23  |  29KB  |  1,280 lines

  1.  void
  2. defmach(lo, hi, str)
  3.     integer    lo, hi;
  4.     machdefstr    str;
  5. {
  6.     register toknidx    i;
  7.     toknbuf    w;
  8.  
  9.     {   register int    _j, _i = 1 - 1;
  10.         for (_j = 0; _j < 16; )
  11.         w.A[_i++] = str.A[_j++];
  12.     }
  13.     if (w.A[machdeflen - 1] != space)
  14.         error(ebadmach);
  15.     {
  16.         toknidx    B74 = machdeflen - 1,
  17.             B75 = 1;
  18.  
  19.         if (B74 >= B75)
  20.             for (i = B74; ; i--) {
  21.                 if (w.A[i - 1] != space) {
  22.                     w.A[i + 1 - 1] = null;
  23.                     goto L999;
  24.                 }
  25.                 if (i == B75) break;
  26.             }
  27.     }
  28.     error(ebadmach);
  29. L999:
  30.     if (nmachdefs >= maxmachdefs)
  31.         error(emanymachs);
  32.     nmachdefs = nmachdefs + 1;
  33.     {
  34.         register struct S193 *W76 = &machdefs.A[nmachdefs - 1];
  35.  
  36.         W76->lolim = lo;
  37.         W76->hilim = hi;
  38.         W76->typstr = savestr(&w);
  39.     }
  40. }
  41.  
  42.  void
  43. initstrstore()
  44. {
  45.     register strbcnt    i;
  46.  
  47.     {
  48.         strbcnt    B77 = 1,
  49.             B78 = maxblkcnt;
  50.  
  51.         if (B77 <= B78)
  52.             for (i = B77; ; i++) {
  53.                 strstor.A[i] = (strblk *)NIL;
  54.                 if (i == B78) break;
  55.             }
  56.     }
  57.     strstor.A[0] = (strblk *)malloc((unsigned)(sizeof(*strstor.A[0])));
  58.     strstor.A[0]->A[0] = null;
  59.     strfree = 1;
  60.     strleft = maxstrblk;
  61. }
  62.  
  63.  
  64.  void
  65. initialize()
  66. {
  67.     register hashtyp    s;
  68.     register pretyps    t;
  69.     register predefs    d;
  70.  
  71.     lineno = 1;
  72.     colno = 0;
  73.     initstrstore();
  74.     setlst = (struct S61 *)NIL;
  75.     setcnt = 0;
  76.     (void)strncpy(hexdig.A, "0123456789ABCDEF", sizeof(hexdig.A));
  77.     symtab = (struct S60 *)NIL;
  78.     statlvl = 0;
  79.     maxlevel = -1;
  80.     enterscope((declptr)NIL);
  81.     varno = 0;
  82.     usenilp = false;
  83.     usesets = false;
  84.     useunion = false;
  85.     usediff = false;
  86.     usemksub = false;
  87.     useintr = false;
  88.     usesge = false;
  89.     usesle = false;
  90.     usesne = false;
  91.     useseq = false;
  92.     usememb = false;
  93.     useins = false;
  94.     usescpy = false;
  95.     usefopn = false;
  96.     usescan = false;
  97.     usegetl = false;
  98.     usecase = false;
  99.     usejmps = false;
  100.     usebool = false;
  101.     usecomp = false;
  102.     usemax = false;
  103.     {
  104.         hashtyp    B79 = 0,
  105.             B80 = hashmax;
  106.  
  107.         if (B79 <= B80)
  108.             for (s = B79; ; s++) {
  109.                 idtab.A[s] = (struct S59 *)NIL;
  110.                 if (s == B80) break;
  111.             }
  112.     }
  113.     {
  114.         predefs    B81 = dabs,
  115.             B82 = dztring;
  116.  
  117.         if ((int)(B81) <= (int)(B82))
  118.             for (d = B81; ; d = (predefs)((int)(d)+1)) {
  119.                 deftab.A[(int)(d)] = (struct S61 *)NIL;
  120.                 defnams.A[(int)(d)] = (struct S62 *)NIL;
  121.                 if (d == B82) break;
  122.             }
  123.     }
  124.     defkey(sand, *((keyword *)"and       "));
  125.     defkey(sarray, *((keyword *)"array     "));
  126.     defkey(sbegin, *((keyword *)"begin     "));
  127.     defkey(scase, *((keyword *)"case      "));
  128.     defkey(sconst, *((keyword *)"const     "));
  129.     defkey(sdiv, *((keyword *)"div       "));
  130.     defkey(sdo, *((keyword *)"do        "));
  131.     defkey(sdownto, *((keyword *)"downto    "));
  132.     defkey(selse, *((keyword *)"else      "));
  133.     defkey(send, *((keyword *)"end       "));
  134.     defkey(sextern, *((keyword *)externsym));
  135.     defkey(sfile, *((keyword *)"file      "));
  136.     defkey(sfor, *((keyword *)"for       "));
  137.     defkey(sforward, *((keyword *)"forward   "));
  138.     defkey(sfunc, *((keyword *)"function  "));
  139.     defkey(sgoto, *((keyword *)"goto      "));
  140.     defkey(sif, *((keyword *)"if        "));
  141.     defkey(sinn, *((keyword *)"in        "));
  142.     defkey(slabel, *((keyword *)"label     "));
  143.     defkey(smod, *((keyword *)"mod       "));
  144.     defkey(snil, *((keyword *)"nil       "));
  145.     defkey(snot, *((keyword *)"not       "));
  146.     defkey(sof, *((keyword *)"of        "));
  147.     defkey(sor, *((keyword *)"or        "));
  148.     defkey(sother, *((keyword *)othersym));
  149.     defkey(spacked, *((keyword *)"packed    "));
  150.     defkey(sproc, *((keyword *)"procedure "));
  151.     defkey(spgm, *((keyword *)"program   "));
  152.     defkey(srecord, *((keyword *)"record    "));
  153.     defkey(srepeat, *((keyword *)"repeat    "));
  154.     defkey(sset, *((keyword *)"set       "));
  155.     defkey(sthen, *((keyword *)"then      "));
  156.     defkey(sto, *((keyword *)"to        "));
  157.     defkey(stype, *((keyword *)"type      "));
  158.     defkey(suntil, *((keyword *)"until     "));
  159.     defkey(svar, *((keyword *)"var       "));
  160.     defkey(swhile, *((keyword *)"while     "));
  161.     defkey(swith, *((keyword *)"with      "));
  162.     defkey(seof, *((keyword *)dummysym));
  163.     cprio.A[(int)(nformat) - (int)(nassign)] = 0;
  164.     cprio.A[(int)(nrange) - (int)(nassign)] = 0;
  165.     cprio.A[(int)(nin) - (int)(nassign)] = 0;
  166.     cprio.A[(int)(nset) - (int)(nassign)] = 0;
  167.     cprio.A[(int)(nassign) - (int)(nassign)] = 0;
  168.     cprio.A[(int)(nor) - (int)(nassign)] = 1;
  169.     cprio.A[(int)(nand) - (int)(nassign)] = 2;
  170.     cprio.A[(int)(neq) - (int)(nassign)] = 3;
  171.     cprio.A[(int)(nne) - (int)(nassign)] = 3;
  172.     cprio.A[(int)(nlt) - (int)(nassign)] = 3;
  173.     cprio.A[(int)(nle) - (int)(nassign)] = 3;
  174.     cprio.A[(int)(ngt) - (int)(nassign)] = 3;
  175.     cprio.A[(int)(nge) - (int)(nassign)] = 3;
  176.     cprio.A[(int)(nplus) - (int)(nassign)] = 4;
  177.     cprio.A[(int)(nminus) - (int)(nassign)] = 4;
  178.     cprio.A[(int)(nmul) - (int)(nassign)] = 5;
  179.     cprio.A[(int)(ndiv) - (int)(nassign)] = 5;
  180.     cprio.A[(int)(nmod) - (int)(nassign)] = 5;
  181.     cprio.A[(int)(nquot) - (int)(nassign)] = 5;
  182.     cprio.A[(int)(nnot) - (int)(nassign)] = 6;
  183.     cprio.A[(int)(numinus) - (int)(nassign)] = 6;
  184.     cprio.A[(int)(nuplus) - (int)(nassign)] = 7;
  185.     cprio.A[(int)(nindex) - (int)(nassign)] = 7;
  186.     cprio.A[(int)(nselect) - (int)(nassign)] = 7;
  187.     cprio.A[(int)(nderef) - (int)(nassign)] = 7;
  188.     cprio.A[(int)(ncall) - (int)(nassign)] = 7;
  189.     cprio.A[(int)(nid) - (int)(nassign)] = 7;
  190.     cprio.A[(int)(nchar) - (int)(nassign)] = 7;
  191.     cprio.A[(int)(ninteger) - (int)(nassign)] = 7;
  192.     cprio.A[(int)(nreal) - (int)(nassign)] = 7;
  193.     cprio.A[(int)(nstring) - (int)(nassign)] = 7;
  194.     cprio.A[(int)(nnil) - (int)(nassign)] = 7;
  195.     pprio.A[(int)(nassign) - (int)(nassign)] = 0;
  196.     pprio.A[(int)(nformat) - (int)(nassign)] = 0;
  197.     pprio.A[(int)(nrange) - (int)(nassign)] = 1;
  198.     pprio.A[(int)(nin) - (int)(nassign)] = 1;
  199.     pprio.A[(int)(neq) - (int)(nassign)] = 1;
  200.     pprio.A[(int)(nne) - (int)(nassign)] = 1;
  201.     pprio.A[(int)(nlt) - (int)(nassign)] = 1;
  202.     pprio.A[(int)(nle) - (int)(nassign)] = 1;
  203.     pprio.A[(int)(ngt) - (int)(nassign)] = 1;
  204.     pprio.A[(int)(nge) - (int)(nassign)] = 1;
  205.     pprio.A[(int)(nor) - (int)(nassign)] = 2;
  206.     pprio.A[(int)(nplus) - (int)(nassign)] = 2;
  207.     pprio.A[(int)(nminus) - (int)(nassign)] = 2;
  208.     pprio.A[(int)(nand) - (int)(nassign)] = 3;
  209.     pprio.A[(int)(nmul) - (int)(nassign)] = 3;
  210.     pprio.A[(int)(ndiv) - (int)(nassign)] = 3;
  211.     pprio.A[(int)(nmod) - (int)(nassign)] = 3;
  212.     pprio.A[(int)(nquot) - (int)(nassign)] = 3;
  213.     pprio.A[(int)(nnot) - (int)(nassign)] = 4;
  214.     pprio.A[(int)(numinus) - (int)(nassign)] = 4;
  215.     pprio.A[(int)(nuplus) - (int)(nassign)] = 5;
  216.     pprio.A[(int)(nset) - (int)(nassign)] = 6;
  217.     pprio.A[(int)(nindex) - (int)(nassign)] = 6;
  218.     pprio.A[(int)(nselect) - (int)(nassign)] = 6;
  219.     pprio.A[(int)(nderef) - (int)(nassign)] = 6;
  220.     pprio.A[(int)(ncall) - (int)(nassign)] = 6;
  221.     pprio.A[(int)(nid) - (int)(nassign)] = 6;
  222.     pprio.A[(int)(nchar) - (int)(nassign)] = 6;
  223.     pprio.A[(int)(ninteger) - (int)(nassign)] = 6;
  224.     pprio.A[(int)(nreal) - (int)(nassign)] = 6;
  225.     pprio.A[(int)(nstring) - (int)(nassign)] = 6;
  226.     pprio.A[(int)(nnil) - (int)(nassign)] = 6;
  227.     defname(cabort, *((keyword *)"abort     "));
  228.     defname(cbreak, *((keyword *)"break     "));
  229.     defname(ccontinue, *((keyword *)"continue  "));
  230.     defname(cdefine, *((keyword *)"define    "));
  231.     defname(cdefault, *((keyword *)"default   "));
  232.     defname(cdouble, *((keyword *)"double    "));
  233.     defname(cedata, *((keyword *)"edata     "));
  234.     defname(cenum, *((keyword *)"enum      "));
  235.     defname(cetext, *((keyword *)"etext     "));
  236.     defname(cextern, *((keyword *)"extern    "));
  237.     defname(cfclose, *((keyword *)"fclose    "));
  238.     defname(cfflush, *((keyword *)"fflush    "));
  239.     defname(cfgetc, *((keyword *)"fgetc     "));
  240.     defname(cfloat, *((keyword *)"float     "));
  241.     defname(cfloor, *((keyword *)"floor     "));
  242.     defname(cfprintf, *((keyword *)"fprintf   "));
  243.     defname(cfputc, *((keyword *)"fputc     "));
  244.     defname(cfread, *((keyword *)"fread     "));
  245.     defname(cfscanf, *((keyword *)"fscanf    "));
  246.     defname(cfwrite, *((keyword *)"fwrite    "));
  247.     defname(cgetc, *((keyword *)"getc      "));
  248.     defname(cgetpid, *((keyword *)"getpid    "));
  249.     defname(cint, *((keyword *)"int       "));
  250.     defname(cinclude, *((keyword *)"include   "));
  251.     defname(clong, *((keyword *)"long      "));
  252.     defname(clog, *((keyword *)"log       "));
  253.     defname(cmain, *((keyword *)"main      "));
  254.     defname(cmalloc, *((keyword *)"malloc    "));
  255.     defname(cprintf, *((keyword *)"printf    "));
  256.     defname(cpower, *((keyword *)"pow       "));
  257.     defname(cputc, *((keyword *)"putc      "));
  258.     defname(cread, *((keyword *)"read      "));
  259.     defname(creturn, *((keyword *)"return    "));
  260.     defname(cregister, *((keyword *)"register  "));
  261.     defname(crewind, *((keyword *)"rewind    "));
  262.     defname(cscanf, *((keyword *)"scanf     "));
  263.     defname(csetbits, *((keyword *)"setbits   "));
  264.     defname(csetword, *((keyword *)"setword   "));
  265.     defname(csetptr, *((keyword *)"setptr    "));
  266.     defname(cshort, *((keyword *)"short     "));
  267.     defname(csigned, *((keyword *)"signed    "));
  268.     defname(csizeof, *((keyword *)"sizeof    "));
  269.     defname(csprintf, *((keyword *)"sprintf   "));
  270.     defname(cstatic, *((keyword *)"static    "));
  271.     defname(cstdin, *((keyword *)"stdin     "));
  272.     defname(cstdout, *((keyword *)"stdout    "));
  273.     defname(cstderr, *((keyword *)"stderr    "));
  274.     defname(cstrncmp, *((keyword *)"strncmp   "));
  275.     defname(cstrncpy, *((keyword *)"strncpy   "));
  276.     defname(cstruct, *((keyword *)"struct    "));
  277.     defname(cswitch, *((keyword *)"switch    "));
  278.     defname(ctypedef, *((keyword *)"typedef   "));
  279.     defname(cundef, *((keyword *)"undef     "));
  280.     defname(cungetc, *((keyword *)"ungetc    "));
  281.     defname(cunion, *((keyword *)"union     "));
  282.     defname(cunlink, *((keyword *)"unlink    "));
  283.     defname(cunsigned, *((keyword *)"unsigned  "));
  284.     defname(cwrite, *((keyword *)"write     "));
  285.     defid(nfunc, dabs, *((keyword *)"abs       "));
  286.     defid(nfunc, darctan, *((keyword *)"arctan    "));
  287.     defid(nvar, dargc, *((keyword *)"argc      "));
  288.     defid(nproc, dargv, *((keyword *)"argv      "));
  289.     defid(nscalar, dboolean, *((keyword *)"boolean   "));
  290.     defid(ntype, dchar, *((keyword *)"char      "));
  291.     defid(nfunc, dchr, *((keyword *)"chr       "));
  292.     defid(nproc, dclose, *((keyword *)"close     "));
  293.     defid(nfunc, dcos, *((keyword *)"cos       "));
  294.     defid(nproc, ddispose, *((keyword *)"dispose   "));
  295.     defid(nid, dfalse, *((keyword *)"false     "));
  296.     defid(nfunc, deof, *((keyword *)"eof       "));
  297.     defid(nfunc, deoln, *((keyword *)"eoln      "));
  298.     defid(nproc, dexit, *((keyword *)"exit      "));
  299.     defid(nfunc, dexp, *((keyword *)"exp       "));
  300.     defid(nproc, dflush, *((keyword *)"flush     "));
  301.     defid(nproc, dget, *((keyword *)"get       "));
  302.     defid(nproc, dhalt, *((keyword *)"halt      "));
  303.     defid(nvar, dinput, *((keyword *)"input     "));
  304.     defid(ntype, dinteger, *((keyword *)"integer   "));
  305.     defid(nfunc, dln, *((keyword *)"ln        "));
  306.     defid(nconst, dmaxint, *((keyword *)"maxint    "));
  307.     defid(nproc, dmessage, *((keyword *)"message   "));
  308.     defid(nproc, dnew, *((keyword *)"new       "));
  309.     defid(nfunc, dodd, *((keyword *)"odd       "));
  310.     defid(nfunc, dord, *((keyword *)"ord       "));
  311.     defid(nvar, doutput, *((keyword *)"output    "));
  312.     defid(nproc, dpack, *((keyword *)"pack      "));
  313.     defid(nproc, dpage, *((keyword *)"page      "));
  314.     defid(nfunc, dpred, *((keyword *)"pred      "));
  315.     defid(nproc, dput, *((keyword *)"put       "));
  316.     defid(nproc, dread, *((keyword *)"read      "));
  317.     defid(nproc, dreadln, *((keyword *)"readln    "));
  318.     defid(ntype, dreal, *((keyword *)"real      "));
  319.     defid(nproc, dreset, *((keyword *)"reset     "));
  320.     defid(nproc, drewrite, *((keyword *)"rewrite   "));
  321.     defid(nfunc, dround, *((keyword *)"round     "));
  322.     defid(nfunc, dsin, *((keyword *)"sin       "));
  323.     defid(nfunc, dsqr, *((keyword *)"sqr       "));
  324.     defid(nfunc, dsqrt, *((keyword *)"sqrt      "));
  325.     defid(nfunc, dsucc, *((keyword *)"succ      "));
  326.     defid(ntype, dtext, *((keyword *)"text      "));
  327.     defid(nid, dtrue, *((keyword *)"true      "));
  328.     defid(nfunc, dtrunc, *((keyword *)"trunc     "));
  329.     defid(nfunc, dtan, *((keyword *)"tan       "));
  330.     defid(nproc, dunpack, *((keyword *)"unpack    "));
  331.     defid(nproc, dwrite, *((keyword *)"write     "));
  332.     defid(nproc, dwriteln, *((keyword *)"writeln   "));
  333.     defid(nfield, dzinit, *((keyword *)"$nit      "));
  334.     defid(ntype, dztring, *((keyword *)"$ztring   "));
  335.     deftab.A[(int)(dboolean)]->U.V14.tbind->U.V17.tscalid = deftab.A[(int)(dfalse)];
  336.     deftab.A[(int)(dfalse)]->tnext = deftab.A[(int)(dtrue)];
  337.     currsym.st = sinteger;
  338.     currsym.U.V3.vint = maxint;
  339.     deftab.A[(int)(dmaxint)]->U.V14.tbind = mklit();
  340.     deftab.A[(int)(dargc)]->U.V14.tbind = deftab.A[(int)(dinteger)]->U.V14.tbind;
  341.     deftab.A[(int)(dinput)]->U.V14.tbind = deftab.A[(int)(dtext)]->U.V14.tbind;
  342.     deftab.A[(int)(doutput)]->U.V14.tbind = deftab.A[(int)(dtext)]->U.V14.tbind;
  343.     {
  344.         pretyps    B83 = tnone,
  345.             B84 = terror;
  346.  
  347.         if ((int)(B83) <= (int)(B84))
  348.             for (t = B83; ; t = (pretyps)((int)(t)+1)) {
  349.                 switch (t) {
  350.                   case tboolean:
  351.                     typnods.A[(int)(t)] = deftab.A[(int)(dboolean)];
  352.                     break ;
  353.                   case tchar:
  354.                     typnods.A[(int)(t)] = deftab.A[(int)(dchar)]->U.V14.tbind;
  355.                     break ;
  356.                   case tinteger:
  357.                     typnods.A[(int)(t)] = deftab.A[(int)(dinteger)]->U.V14.tbind;
  358.                     break ;
  359.                   case treal:
  360.                     typnods.A[(int)(t)] = deftab.A[(int)(dreal)]->U.V14.tbind;
  361.                     break ;
  362.                   case ttext:
  363.                     typnods.A[(int)(t)] = deftab.A[(int)(dtext)]->U.V14.tbind;
  364.                     break ;
  365.                   case tstring:
  366.                     typnods.A[(int)(t)] = deftab.A[(int)(dztring)]->U.V14.tbind;
  367.                     break ;
  368.                   case tnil:  case tset:  case tpoly:  case tnone:
  369.                     typnods.A[(int)(t)] = mknode(npredef);
  370.                     break ;
  371.                   case terror:
  372.                     break ;
  373.                   default:
  374.                     Caseerror(Line);
  375.                 }
  376.                 if (Member((unsigned)(t), Conset[163]))
  377.                     typnods.A[(int)(t)]->U.V12.tobtyp = t;
  378.                 if (t == B84) break;
  379.             }
  380.     }
  381.     fixinit(defnams.A[(int)(dzinit)]->U.V6.lid->istr);
  382.     deftab.A[(int)(dzinit)]->U.V14.tbind = deftab.A[(int)(dinteger)]->U.V14.tbind;
  383.     {
  384.         predefs    B85 = dabs,
  385.             B86 = dztring;
  386.  
  387.         if ((int)(B85) <= (int)(B86))
  388.             for (d = B85; ; d = (predefs)((int)(d)+1)) {
  389.                 linkup((treeptr)NIL, deftab.A[(int)(d)]);
  390.                 if (d == B86) break;
  391.             }
  392.     }
  393.     deftab.A[(int)(dchr)]->U.V13.tfuntyp = typnods.A[(int)(tchar)];
  394.     deftab.A[(int)(deof)]->U.V13.tfuntyp = typnods.A[(int)(tboolean)];
  395.     deftab.A[(int)(deoln)]->U.V13.tfuntyp = typnods.A[(int)(tboolean)];
  396.     deftab.A[(int)(dodd)]->U.V13.tfuntyp = typnods.A[(int)(tboolean)];
  397.     deftab.A[(int)(dord)]->U.V13.tfuntyp = typnods.A[(int)(tinteger)];
  398.     deftab.A[(int)(dround)]->U.V13.tfuntyp = typnods.A[(int)(tinteger)];
  399.     deftab.A[(int)(dtrunc)]->U.V13.tfuntyp = typnods.A[(int)(tinteger)];
  400.     deftab.A[(int)(darctan)]->U.V13.tfuntyp = typnods.A[(int)(treal)];
  401.     deftab.A[(int)(dcos)]->U.V13.tfuntyp = typnods.A[(int)(treal)];
  402.     deftab.A[(int)(dsin)]->U.V13.tfuntyp = typnods.A[(int)(treal)];
  403.     deftab.A[(int)(dtan)]->U.V13.tfuntyp = typnods.A[(int)(treal)];
  404.     deftab.A[(int)(dsqrt)]->U.V13.tfuntyp = typnods.A[(int)(treal)];
  405.     deftab.A[(int)(dexp)]->U.V13.tfuntyp = typnods.A[(int)(treal)];
  406.     deftab.A[(int)(dln)]->U.V13.tfuntyp = typnods.A[(int)(treal)];
  407.     deftab.A[(int)(dsqr)]->U.V13.tfuntyp = typnods.A[(int)(tpoly)];
  408.     deftab.A[(int)(dabs)]->U.V13.tfuntyp = typnods.A[(int)(tpoly)];
  409.     deftab.A[(int)(dpred)]->U.V13.tfuntyp = typnods.A[(int)(tpoly)];
  410.     deftab.A[(int)(dsucc)]->U.V13.tfuntyp = typnods.A[(int)(tpoly)];
  411.     deftab.A[(int)(dargv)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
  412.     deftab.A[(int)(ddispose)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
  413.     deftab.A[(int)(dexit)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
  414.     deftab.A[(int)(dget)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
  415.     deftab.A[(int)(dhalt)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
  416.     deftab.A[(int)(dnew)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
  417.     deftab.A[(int)(dpack)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
  418.     deftab.A[(int)(dput)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
  419.     deftab.A[(int)(dread)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
  420.     deftab.A[(int)(dreadln)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
  421.     deftab.A[(int)(dreset)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
  422.     deftab.A[(int)(drewrite)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
  423.     deftab.A[(int)(dwrite)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
  424.     deftab.A[(int)(dwriteln)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
  425.     deftab.A[(int)(dmessage)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
  426.     deftab.A[(int)(dunpack)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
  427.     nmachdefs = 0;
  428.     defmach(0, 255, *((machdefstr *)"unsigned char   "));
  429.     defmach(-128, 127, *((machdefstr *)"char            "));
  430.     defmach(0, 65535, *((machdefstr *)"unsigned short  "));
  431.     defmach(-32768, 32767, *((machdefstr *)"short           "));
  432.     defmach(-2147483647, 2147483647, *((machdefstr *)"long            "));
  433. }
  434.  
  435. extern void exit();
  436.  
  437.  void
  438. error(m)
  439.     errors    m;
  440. {
  441.     prtmsg(m);
  442.     exit(1);
  443.     longjmp(J[0].jb, 9999);
  444. }
  445.  
  446.  void
  447. fatal(m)
  448.     errors    m;
  449. {
  450.     prtmsg(m);
  451.     abort();
  452. }
  453.  
  454. /*
  455. **    Start of program code
  456. */
  457. main()
  458. {
  459.     if (setjmp(J[0].jb))
  460.     goto L9999;
  461.     initialize();
  462.     if (echo)
  463.         (void)fprintf(output.fp, "# ifdef PASCAL\n"), Putl(output, 1);
  464.     parse();
  465.     if (echo)
  466.         (void)fprintf(output.fp, "# else\n"), Putl(output, 1);
  467.     lineno = 0;
  468.     lastline = 0;
  469.     transform();
  470.     emit();
  471.     if (echo)
  472.         (void)fprintf(output.fp, "# endif\n"), Putl(output, 1);
  473. L9999:
  474.     ;
  475.     exit(0);
  476. }
  477. /*
  478. **    End of program code
  479. */
  480. static setword    Q0[] = {
  481.     1,
  482.     0x03FD
  483. };
  484. static setword    Q1[] = {
  485.     1,
  486.     0x004C
  487. };
  488. static setword    Q2[] = {
  489.     1,
  490.     0x0000
  491. };
  492. static setword    Q3[] = {
  493.     2,
  494.     0x000E,    0x5210
  495. };
  496. static setword    Q4[] = {
  497.     2,
  498.     0x000E,    0x1210
  499. };
  500. static setword    Q5[] = {
  501.     1,
  502.     0x0C00
  503. };
  504. static setword    Q6[] = {
  505.     1,
  506.     0x000C
  507. };
  508. static setword    Q7[] = {
  509.     2,
  510.     0x000E,    0x0210
  511. };
  512. static setword    Q8[] = {
  513.     3,
  514.     0x0000,    0x0000,    0x0060
  515. };
  516. static setword    Q9[] = {
  517.     4,
  518.     0x0002,    0x0000,    0x0064,    0x0800
  519. };
  520. static setword    Q10[] = {
  521.     1,
  522.     0x0C00
  523. };
  524. static setword    Q11[] = {
  525.     1,
  526.     0x000C
  527. };
  528. static setword    Q12[] = {
  529.     4,
  530.     0x0000,    0x0000,    0x4FF0,    0x0008
  531. };
  532. static setword    Q13[] = {
  533.     3,
  534.     0x0000,    0x0000,    0x0780
  535. };
  536. static setword    Q14[] = {
  537.     3,
  538.     0x0000,    0x0000,    0x0780
  539. };
  540. static setword    Q15[] = {
  541.     5,
  542.     0x0000,    0x0001,    0x0000,    0x0000,    0x0001
  543. };
  544. static setword    Q16[] = {
  545.     3,
  546.     0x0000,    0x0000,    0x07E0
  547. };
  548. static setword    Q17[] = {
  549.     3,
  550.     0x0000,    0x0000,    0xB000
  551. };
  552. static setword    Q18[] = {
  553.     4,
  554.     0x0000,    0x0008,    0x0000,    0x0040
  555. };
  556. static setword    Q19[] = {
  557.     3,
  558.     0x0000,    0x0000,    0xB560
  559. };
  560. static setword    Q20[] = {
  561.     4,
  562.     0x0000,    0x0000,    0x4FF0,    0x0008
  563. };
  564. static setword    Q21[] = {
  565.     1,
  566.     0x0C00
  567. };
  568. static setword    Q22[] = {
  569.     4,
  570.     0x0000,    0x0000,    0x0000,    0x1700
  571. };
  572. static setword    Q23[] = {
  573.     2,
  574.     0x0000,    0x0003
  575. };
  576. static setword    Q24[] = {
  577.     4,
  578.     0x0000,    0x0000,    0x0000,    0x1700
  579. };
  580. static setword    Q25[] = {
  581.     3,
  582.     0x0000,    0x0040,    0x4000
  583. };
  584. static setword    Q26[] = {
  585.     1,
  586.     0x000E
  587. };
  588. static setword    Q27[] = {
  589.     1,
  590.     0x000E
  591. };
  592. static setword    Q28[] = {
  593.     1,
  594.     0x000C
  595. };
  596. static setword    Q29[] = {
  597.     1,
  598.     0x000E
  599. };
  600. static setword    Q30[] = {
  601.     1,
  602.     0x000E
  603. };
  604. static setword    Q31[] = {
  605.     2,
  606.     0x8000,    0x0045
  607. };
  608. static setword    Q32[] = {
  609.     1,
  610.     0x000E
  611. };
  612. static setword    Q33[] = {
  613.     1,
  614.     0x000E
  615. };
  616. static setword    Q34[] = {
  617.     3,
  618.     0x0000,    0x0000,    0x0040
  619. };
  620. static setword    Q35[] = {
  621.     3,
  622.     0x4010,    0x0C00,    0x000A
  623. };
  624. static setword    Q36[] = {
  625.     5,
  626.     0x0300,    0x0000,    0x0004,    0x2000,    0x0001
  627. };
  628. static setword    Q37[] = {
  629.     4,
  630.     0x0300,    0x0000,    0x0004,    0x2000
  631. };
  632. static setword    Q38[] = {
  633.     3,
  634.     0x0000,    0x0000,    0x0080
  635. };
  636. static setword    Q39[] = {
  637.     4,
  638.     0x0040,    0x0000,    0x0000,    0x0800
  639. };
  640. static setword    Q40[] = {
  641.     1,
  642.     0x0040
  643. };
  644. static setword    Q41[] = {
  645.     3,
  646.     0x0080,    0x0000,    0x0001
  647. };
  648. static setword    Q42[] = {
  649.     4,
  650.     0x0000,    0x0000,    0x0000,    0x4000
  651. };
  652. static setword    Q43[] = {
  653.     3,
  654.     0x0000,    0x0000,    0x0800
  655. };
  656. static setword    Q44[] = {
  657.     4,
  658.     0x0000,    0x0000,    0x0004,    0x2000
  659. };
  660. static setword    Q45[] = {
  661.     1,
  662.     0x0040
  663. };
  664. static setword    Q46[] = {
  665.     2,
  666.     0x0000,    0x8000
  667. };
  668. static setword    Q47[] = {
  669.     4,
  670.     0x0300,    0x0000,    0x0004,    0x2000
  671. };
  672. static setword    Q48[] = {
  673.     4,
  674.     0x930C,    0x2001,    0x0834,    0x2000
  675. };
  676. static setword    Q49[] = {
  677.     4,
  678.     0x930C,    0x2001,    0x0834,    0x3000
  679. };
  680. static setword    Q50[] = {
  681.     4,
  682.     0x0000,    0x0000,    0x0000,    0x1800
  683. };
  684. static setword    Q51[] = {
  685.     2,
  686.     0x0200,    0x0100
  687. };
  688. static setword    Q52[] = {
  689.     3,
  690.     0x0200,    0x0100,    0x3C80
  691. };
  692. static setword    Q53[] = {
  693.     2,
  694.     0x0000,    0x0040
  695. };
  696. static setword    Q54[] = {
  697.     4,
  698.     0x0000,    0x0000,    0x4FF0,    0x0008
  699. };
  700. static setword    Q55[] = {
  701.     4,
  702.     0x03E1,    0x80CA,    0xF005,    0xBFFE
  703. };
  704. static setword    Q56[] = {
  705.     4,
  706.     0x0000,    0x0030,    0x3F80,    0x001A
  707. };
  708. static setword    Q57[] = {
  709.     4,
  710.     0x0000,    0x0000,    0x0000,    0x0478
  711. };
  712. static setword    Q58[] = {
  713.     4,
  714.     0x0000,    0x0000,    0x0000,    0x0478
  715. };
  716. static setword    Q59[] = {
  717.     1,
  718.     0x0C0C
  719. };
  720. static setword    Q60[] = {
  721.     3,
  722.     0x0000,    0x0000,    0x0800
  723. };
  724. static setword    Q61[] = {
  725.     5,
  726.     0x0000,    0x0000,    0x0000,    0x000B,    0x0001
  727. };
  728. static setword    Q62[] = {
  729.     5,
  730.     0x03E1,    0x80CA,    0xF005,    0xFFFF,    0x0001
  731. };
  732. static setword    Q63[] = {
  733.     4,
  734.     0x930C,    0x2001,    0x0834,    0x2000
  735. };
  736. static setword    Q64[] = {
  737.     4,
  738.     0x0000,    0x0000,    0x0000,    0x1000
  739. };
  740. static setword    Q65[] = {
  741.     4,
  742.     0x930C,    0x2001,    0x08B4,    0x2000
  743. };
  744. static setword    Q66[] = {
  745.     4,
  746.     0x0000,    0x0000,    0x0000,    0x2004
  747. };
  748. static setword    Q67[] = {
  749.     3,
  750.     0x0000,    0x0000,    0x0800
  751. };
  752. static setword    Q68[] = {
  753.     4,
  754.     0x0000,    0x0000,    0x0000,    0x1000
  755. };
  756. static setword    Q69[] = {
  757.     4,
  758.     0x0000,    0x0000,    0x0000,    0x1002
  759. };
  760. static setword    Q70[] = {
  761.     4,
  762.     0x0000,    0x0000,    0x0000,    0x2004
  763. };
  764. static setword    Q71[] = {
  765.     4,
  766.     0x0000,    0x0000,    0x0000,    0x2006
  767. };
  768. static setword    Q72[] = {
  769.     4,
  770.     0x0000,    0x0000,    0x0000,    0x2004
  771. };
  772. static setword    Q73[] = {
  773.     3,
  774.     0x0002,    0x0000,    0x0800
  775. };
  776. static setword    Q74[] = {
  777.     3,
  778.     0x0000,    0x0000,    0x0800
  779. };
  780. static setword    Q75[] = {
  781.     4,
  782.     0x0000,    0x0000,    0x0000,    0x1000
  783. };
  784. static setword    Q76[] = {
  785.     3,
  786.     0x0000,    0x0000,    0x0800
  787. };
  788. static setword    Q77[] = {
  789.     3,
  790.     0x4000,    0x0400,    0x0808
  791. };
  792. static setword    Q78[] = {
  793.     3,
  794.     0x0002,    0x0000,    0x0800
  795. };
  796. static setword    Q79[] = {
  797.     2,
  798.     0x0000,    0x0040
  799. };
  800. static setword    Q80[] = {
  801.     4,
  802.     0x0000,    0x0000,    0x0000,    0x2010
  803. };
  804. static setword    Q81[] = {
  805.     3,
  806.     0x0000,    0x0000,    0x0800
  807. };
  808. static setword    Q82[] = {
  809.     4,
  810.     0x0000,    0x0000,    0x0000,    0x2010
  811. };
  812. static setword    Q83[] = {
  813.     3,
  814.     0x0000,    0x0000,    0x0800
  815. };
  816. static setword    Q84[] = {
  817.     4,
  818.     0x0000,    0x0000,    0x0000,    0x0008
  819. };
  820. static setword    Q85[] = {
  821.     4,
  822.     0x0000,    0x0000,    0x0000,    0x1000
  823. };
  824. static setword    Q86[] = {
  825.     3,
  826.     0x0000,    0x0000,    0x0800
  827. };
  828. static setword    Q87[] = {
  829.     4,
  830.     0x0000,    0x0000,    0x0000,    0x8000
  831. };
  832. static setword    Q88[] = {
  833.     3,
  834.     0x0000,    0x0000,    0x0800
  835. };
  836. static setword    Q89[] = {
  837.     3,
  838.     0x4004,    0x0400,    0x0040
  839. };
  840. static setword    Q90[] = {
  841.     4,
  842.     0x0000,    0x0000,    0x0000,    0x2000
  843. };
  844. static setword    Q91[] = {
  845.     1,
  846.     0x2400
  847. };
  848. static setword    Q92[] = {
  849.     3,
  850.     0x4014,    0x0404,    0x000A
  851. };
  852. static setword    Q93[] = {
  853.     4,
  854.     0x0000,    0x0000,    0x0000,    0x2000
  855. };
  856. static setword    Q94[] = {
  857.     3,
  858.     0x6414,    0x0404,    0x000A
  859. };
  860. static setword    Q95[] = {
  861.     4,
  862.     0x0000,    0x0000,    0x0000,    0x2000
  863. };
  864. static setword    Q96[] = {
  865.     3,
  866.     0x0000,    0x0000,    0x0800
  867. };
  868. static setword    Q97[] = {
  869.     3,
  870.     0x0000,    0x0000,    0x0800
  871. };
  872. static setword    Q98[] = {
  873.     3,
  874.     0x4004,    0x0400,    0x0840
  875. };
  876. static setword    Q99[] = {
  877.     4,
  878.     0x0000,    0x0000,    0x0000,    0x1800
  879. };
  880. static setword    Q100[] = {
  881.     3,
  882.     0x0000,    0x0000,    0x0800
  883. };
  884. static setword    Q101[] = {
  885.     4,
  886.     0x0000,    0x0000,    0x0000,    0x1800
  887. };
  888. static setword    Q102[] = {
  889.     3,
  890.     0x0000,    0x0000,    0x0800
  891. };
  892. static setword    Q103[] = {
  893.     3,
  894.     0x4004,    0x0400,    0x0848
  895. };
  896. static setword    Q104[] = {
  897.     4,
  898.     0x0000,    0x0000,    0x0000,    0x0020
  899. };
  900. static setword    Q105[] = {
  901.     3,
  902.     0x0000,    0x0000,    0x0800
  903. };
  904. static setword    Q106[] = {
  905.     2,
  906.     0x0000,    0x0040
  907. };
  908. static setword    Q107[] = {
  909.     2,
  910.     0x0000,    0x0040
  911. };
  912. static setword    Q108[] = {
  913.     4,
  914.     0x0000,    0x0000,    0x0000,    0x0010
  915. };
  916. static setword    Q109[] = {
  917.     4,
  918.     0x0000,    0x0000,    0x0000,    0x0008
  919. };
  920. static setword    Q110[] = {
  921.     4,
  922.     0x0200,    0x0000,    0x0000,    0x2004
  923. };
  924. static setword    Q111[] = {
  925.     3,
  926.     0x0000,    0x0000,    0x0800
  927. };
  928. static setword    Q112[] = {
  929.     4,
  930.     0x0000,    0x0000,    0x0000,    0x0004
  931. };
  932. static setword    Q113[] = {
  933.     3,
  934.     0x0000,    0x0000,    0x0800
  935. };
  936. static setword    Q114[] = {
  937.     3,
  938.     0x0000,    0x0000,    0x3C80
  939. };
  940. static setword    Q115[] = {
  941.     4,
  942.     0x0000,    0x0000,    0x0000,    0x8000
  943. };
  944. static setword    Q116[] = {
  945.     4,
  946.     0x0000,    0x0000,    0x0000,    0x8000
  947. };
  948. static setword    Q117[] = {
  949.     4,
  950.     0x0200,    0x0000,    0x0000,    0x2814
  951. };
  952. static setword    Q118[] = {
  953.     2,
  954.     0x0802,    0x5000
  955. };
  956. static setword    Q119[] = {
  957.     4,
  958.     0x0802,    0x5200,    0x3C80,    0x0003
  959. };
  960. static setword    Q120[] = {
  961.     4,
  962.     0x0200,    0x0000,    0x0000,    0x2004
  963. };
  964. static setword    Q121[] = {
  965.     4,
  966.     0x0000,    0x0000,    0x0000,    0x0002
  967. };
  968. static setword    Q122[] = {
  969.     4,
  970.     0x0000,    0x0000,    0x0000,    0x1800
  971. };
  972. static setword    Q123[] = {
  973.     3,
  974.     0x0000,    0x0000,    0x3C80
  975. };
  976. static setword    Q124[] = {
  977.     2,
  978.     0x0000,    0x0040
  979. };
  980. static setword    Q125[] = {
  981.     3,
  982.     0x0000,    0x0000,    0x0800
  983. };
  984. static setword    Q126[] = {
  985.     4,
  986.     0x0000,    0x0040,    0x0000,    0x1000
  987. };
  988. static setword    Q127[] = {
  989.     3,
  990.     0x0000,    0x0000,    0x0800
  991. };
  992. static setword    Q128[] = {
  993.     3,
  994.     0x0008,    0x0000,    0x0800
  995. };
  996. static setword    Q129[] = {
  997.     4,
  998.     0x0000,    0x0000,    0x0000,    0x1000
  999. };
  1000. static setword    Q130[] = {
  1001.     3,
  1002.     0x0008,    0x0000,    0x0800
  1003. };
  1004. static setword    Q131[] = {
  1005.     3,
  1006.     0x0000,    0x0000,    0x0880
  1007. };
  1008. static setword    Q132[] = {
  1009.     3,
  1010.     0x0000,    0x0000,    0x0980
  1011. };
  1012. static setword    Q133[] = {
  1013.     3,
  1014.     0x0000,    0x0000,    0x3000
  1015. };
  1016. static setword    Q134[] = {
  1017.     3,
  1018.     0x4004,    0x0400,    0x084A
  1019. };
  1020. static setword    Q135[] = {
  1021.     4,
  1022.     0x0000,    0x0000,    0x0000,    0x2000
  1023. };
  1024. static setword    Q136[] = {
  1025.     3,
  1026.     0x0000,    0x0000,    0x3F80
  1027. };
  1028. static setword    Q137[] = {
  1029.     4,
  1030.     0x0000,    0x0000,    0x0000,    0x0020
  1031. };
  1032. static setword    Q138[] = {
  1033.     3,
  1034.     0x0000,    0x0000,    0x0800
  1035. };
  1036. static setword    Q139[] = {
  1037.     4,
  1038.     0x0000,    0x0000,    0x0000,    0x1824
  1039. };
  1040. static setword    Q140[] = {
  1041.     3,
  1042.     0x0000,    0x0000,    0x0800
  1043. };
  1044. static setword    Q141[] = {
  1045.     4,
  1046.     0x0000,    0x0000,    0x0000,    0x1824
  1047. };
  1048. static setword    Q142[] = {
  1049.     3,
  1050.     0x4014,    0x0400,    0x000A
  1051. };
  1052. static setword    Q143[] = {
  1053.     4,
  1054.     0x0000,    0x0000,    0x0000,    0x2800
  1055. };
  1056. static setword    Q144[] = {
  1057.     3,
  1058.     0x0000,    0x0000,    0x0080
  1059. };
  1060. static setword    Q145[] = {
  1061.     4,
  1062.     0x0000,    0x0000,    0x0000,    0x2000
  1063. };
  1064. static setword    Q146[] = {
  1065.     5,
  1066.     0x0000,    0x0000,    0x0000,    0x0000,    0x0001
  1067. };
  1068. static setword    Q147[] = {
  1069.     3,
  1070.     0x4014,    0x0404,    0x000A
  1071. };
  1072. static setword    Q148[] = {
  1073.     4,
  1074.     0x0000,    0x0000,    0x0000,    0x2000
  1075. };
  1076. static setword    Q149[] = {
  1077.     3,
  1078.     0x0000,    0x0000,    0x0800
  1079. };
  1080. static setword    Q150[] = {
  1081.     4,
  1082.     0x0000,    0x0000,    0x0000,    0x2002
  1083. };
  1084. static setword    Q151[] = {
  1085.     3,
  1086.     0x0000,    0x0000,    0x0800
  1087. };
  1088. static setword    Q152[] = {
  1089.     4,
  1090.     0x0000,    0x0000,    0x0000,    0x0804
  1091. };
  1092. static setword    Q153[] = {
  1093.     3,
  1094.     0x0000,    0x0000,    0x0800
  1095. };
  1096. static setword    Q154[] = {
  1097.     4,
  1098.     0x0000,    0x0000,    0x0000,    0x0804
  1099. };
  1100. static setword    Q155[] = {
  1101.     3,
  1102.     0x0000,    0x0000,    0x0800
  1103. };
  1104. static setword    Q156[] = {
  1105.     4,
  1106.     0x0000,    0x0000,    0x0000,    0x0804
  1107. };
  1108. static setword    Q157[] = {
  1109.     3,
  1110.     0x0004,    0x0000,    0x0040
  1111. };
  1112. static setword    Q158[] = {
  1113.     1,
  1114.     0x0018
  1115. };
  1116. static setword    Q159[] = {
  1117.     1,
  1118.     0x00C0
  1119. };
  1120. static setword    Q160[] = {
  1121.     1,
  1122.     0x001A
  1123. };
  1124. static setword    Q161[] = {
  1125.     1,
  1126.     0x001E
  1127. };
  1128. static setword    Q162[] = {
  1129.     1,
  1130.     0x001F
  1131. };
  1132. static setword    Q163[] = {
  1133.     1,
  1134.     0x1FE7
  1135. };
  1136. static setword    *Conset[] = {
  1137.     Q163,    Q162,    Q161,
  1138.     Q160,    Q159,    Q158,    Q157,    Q156,    Q155,
  1139.     Q154,    Q153,    Q152,    Q151,    Q150,    Q149,
  1140.     Q148,    Q147,    Q146,    Q145,    Q144,    Q143,
  1141.     Q142,    Q141,    Q140,    Q139,    Q138,    Q137,
  1142.     Q136,    Q135,    Q134,    Q133,    Q132,    Q131,
  1143.     Q130,    Q129,    Q128,    Q127,    Q126,    Q125,
  1144.     Q124,    Q123,    Q122,    Q121,    Q120,    Q119,
  1145.     Q118,    Q117,    Q116,    Q115,    Q114,    Q113,
  1146.     Q112,    Q111,    Q110,    Q109,    Q108,    Q107,
  1147.     Q106,    Q105,    Q104,    Q103,    Q102,    Q101,
  1148.     Q100,    Q99,    Q98,    Q97,    Q96,    Q95,
  1149.     Q94,    Q93,    Q92,    Q91,    Q90,    Q89,
  1150.     Q88,    Q87,    Q86,    Q85,    Q84,    Q83,
  1151.     Q82,    Q81,    Q80,    Q79,    Q78,    Q77,
  1152.     Q76,    Q75,    Q74,    Q73,    Q72,    Q71,
  1153.     Q70,    Q69,    Q68,    Q67,    Q66,    Q65,
  1154.     Q64,    Q63,    Q62,    Q61,    Q60,    Q59,
  1155.     Q58,    Q57,    Q56,    Q55,    Q54,    Q53,
  1156.     Q52,    Q51,    Q50,    Q49,    Q48,    Q47,
  1157.     Q46,    Q45,    Q44,    Q43,    Q42,    Q41,
  1158.     Q40,    Q39,    Q38,    Q37,    Q36,    Q35,
  1159.     Q34,    Q33,    Q32,    Q31,    Q30,    Q29,
  1160.     Q28,    Q27,    Q26,    Q25,    Q24,    Q23,
  1161.     Q22,    Q21,    Q20,    Q19,    Q18,    Q17,
  1162.     Q16,    Q15,    Q14,    Q13,    Q12,    Q11,
  1163.     Q10,    Q9,    Q8,    Q7,    Q6,    Q5,
  1164.     Q4,    Q3,    Q2,    Q1,    Q0
  1165. };
  1166.  
  1167. static setptr
  1168. Union(p1, p2)
  1169.     register setptr    p1, p2;
  1170. {
  1171.     register int        i, j, k;
  1172.     register setptr        sp = Newset(),
  1173.                 p3 = sp;
  1174.  
  1175.     j = *p1;
  1176.     *p3 = j;
  1177.     if (j > *p2)
  1178.         j = *p2;
  1179.     else
  1180.         *p3 = *p2;
  1181.     k = *p1 - *p2;
  1182.     p1++, p2++, p3++;
  1183.     for (i = 0; i < j; i++)
  1184.         *p3++ = (*p1++ | *p2++);
  1185.     while (k > 0) {
  1186.         *p3++ = *p1++;
  1187.         k--;
  1188.     }
  1189.     while (k < 0) {
  1190.         *p3++ = *p2++;
  1191.         k++;
  1192.     }
  1193.     return (Saveset(sp));
  1194. }
  1195.  
  1196. static boolean
  1197. Member(m, sp)
  1198.     register unsigned int    m;
  1199.     register setptr    sp;
  1200. {
  1201.     register unsigned int    i = m / (setbits+1) + 1;
  1202.  
  1203.     if ((i <= *sp) && (sp[i] & (1 << (m % (setbits+1)))))
  1204.         return (true);
  1205.     return (false);
  1206. }
  1207.  
  1208. static setptr
  1209. Insmem(m, sp)
  1210.     register unsigned int    m;
  1211.     register setptr    sp;
  1212. {
  1213.     register int    i,
  1214.                 j = m / (setbits+1) + 1;
  1215.  
  1216.     if (*sp < j)
  1217.         for (i = *sp + 1, *sp = j; i <= *sp; i++)
  1218.             sp[i] = 0;
  1219.     sp[j] |= (1 << (m % (setbits+1)));
  1220.     return (sp);
  1221. }
  1222.  
  1223. # ifndef SETSPACE
  1224. # define SETSPACE 256
  1225. # endif
  1226. static setptr
  1227. Currset(n,sp)
  1228.     int    n;
  1229.     setptr    sp;
  1230. {
  1231.     static setword    Space[SETSPACE];
  1232.     static setptr    Top = Space;
  1233.  
  1234.     switch (n) {
  1235.       case 0:
  1236.         Top = Space;
  1237.         return (0);
  1238.       case 1:
  1239.         if (&Space[SETSPACE] - Top <= 15) {
  1240.             (void)fprintf(stderr, "Set-space exhausted\n");
  1241.             exit(1);
  1242.         }
  1243.         *Top = 0;
  1244.         return (Top);
  1245.       case 2:
  1246.         if (Top <= &sp[*sp])
  1247.             Top = &sp[*sp + 1];
  1248.         return (sp);
  1249.     }
  1250.     /* NOTREACHED */
  1251. }
  1252.  
  1253. static void
  1254. Setncpy(S1, S2, N)
  1255.     register setptr    S1, S2;
  1256.     register unsigned int    N;
  1257. {
  1258.     register unsigned int    m;
  1259.  
  1260.     N /= sizeof(setword);
  1261.     *S1++ = --N;
  1262.     m = *S2++;
  1263.     while (m != 0 && N != 0) {
  1264.         *S1++ = *S2++;
  1265.         --N;
  1266.         --m;
  1267.     }
  1268.     while (N-- != 0)
  1269.         *S1++ = 0;
  1270. }
  1271.  
  1272. static void
  1273. Caseerror(n)
  1274.     int    n;
  1275. {
  1276.     (void)fprintf(stderr, "Missing case limb: line %d\n", n);
  1277.     exit(1);
  1278. }
  1279.  
  1280.